package com.fau.om.aop;

import java.util.List;

import javax.annotation.Resource;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import com.fau.om.dao.IBaseDao;
import com.fau.om.entity.MedicalAdmin;
import com.fau.om.entity.MedicalOrders;
import com.fau.om.entity.MedicalOrdersProduct;
import com.fau.om.entity.MedicalProductStorage;
import com.fau.om.util.SystemConfig;

/**
 * @desc 财务系统-产品销售量统计  只针对已审核的订单(待发货)
 * @author dangjh
 * @datetime 2014年12月12日 下午5:23:36
 */
@Aspect
@Component
public class ProductSalesStaAop {

	@Resource
	private IBaseDao iBaseDao;
	
	/**
	 * @desc 审核切点
	 * @author dangjh
	 * @datetime 2014年12月11日 下午9:22:04
	 */
	@Pointcut("execution(* com.fau.om.service.impl.AuditManagerService.auditOrdersPass(..))")
	private void ordersPass() {}
	
	/**
	 * @desc 产品销售量信息统计
	 * @author dangjh
	 * @datetime 2014年12月11日 下午4:47:20
	 */
	@SuppressWarnings("unchecked")
	@AfterReturning("ordersPass()")
	public void orders(JoinPoint joinPoint) {
		Object[] obj = joinPoint.getArgs();
		MedicalOrders orders = (MedicalOrders) obj[1];
		orders = (MedicalOrders) this.iBaseDao.getObjectByHql("from MedicalOrders m where m.id = ? ", orders.getId());
		List<MedicalOrdersProduct> list = this.iBaseDao.getBySql("from MedicalOrdersProduct m where m.ordersId = ? ", null, orders.getId());
		for(MedicalOrdersProduct product : list) {
			MedicalProductStorage storage = new MedicalProductStorage();
			storage.setSerialNum(product.getMedicine().getSerialNum());
			storage.setOrderId(orders.getId());
			MedicalAdmin admin = (MedicalAdmin) this.iBaseDao.getObject(MedicalAdmin.class, orders.getCusSerId());
			if(!SystemConfig.SUPER_ADMIN.equals(admin.getIsSuper())) {
				storage.setGroupId(admin.getGroup().getId());
			}
			storage.setUserId(orders.getCusSerId());
			storage.setProductId(product.getId());
			storage.setProductName(product.getMedicine().getName());
			storage.setProductPrice(product.getPrePrice());		// 优惠单价
			storage.setProductNum(product.getQuantity());		// 产品数量
			storage.setPayment(product.getDiscountPrice());		// 折扣价格(金额)
			storage.setFreight(orders.getFreight());
			storage.setStatus(SystemConfig.ORDERS_WAIT_DELIVERY_TYPE);
			storage.setHospitalId(product.getMedicine().getHospitalId());
			this.iBaseDao.saveObject(storage);
		}
	}
	
}
